import { useState, useRef } from 'react'
export default function useDebounce(params, delay = 500) {
  // 最终还是react自己的方法
  const [state, setState] = useState(params)
  // 缓存一个计时器
  const timer = useRef(null)

  // 为避免方法重新创建，将它缓存在ref中
  const debounce = useRef(args => {
    // 每一次被调用时都清除掉原来注册的事件
    if (timer.current) {
      clearTimeout(timer.current)
    }
    // 注册一个事件在指定的时间后去执行
    timer.current = setTimeout(
      () => (typeof params === 'function' ? params(args) : setState(args)),
      delay
    )
  })
  // 返回状态和修改状态的方法
  return [state, debounce.current]
}
